home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 3006 / 3006.xpi / chrome / dwhelper.jar / content / dwhutil.js < prev    next >
Text File  |  2010-01-15  |  12KB  |  428 lines

  1. /******************************************************************************
  2.  *            Copyright (c) 2006-2009 Michel Gutierrez. All Rights Reserved.
  3.  ******************************************************************************/
  4.  
  5. /**
  6. * Not to be used
  7. * @class The <code>util</code> module is organized as a static class to provide
  8. * various utility services. This class is not to be instantiated.
  9. */
  10. function DWHUtil() { // for js doc only
  11. }
  12.  
  13. DWHUtil={}
  14.  
  15. /**
  16. * Get a property literal value from a datasource or null if no property found for this
  17. * resource
  18. * @param {nsIRDFDatasource} ds the datasource
  19. * @param {nsIRDFResource|string} res the subject resource or id
  20. * @param {nsIRDFResource|string} prop the property or its id
  21. * @type string
  22. */
  23. DWHUtil.getPropertyValue = function(ds,res,prop) {
  24.     if(typeof(res)=="string") {
  25.         res=DWHUtil.RDF.GetResource(res);
  26.     }        
  27.     if(typeof(prop)=="string") {
  28.         prop=DWHUtil.RDF.GetResource(prop);
  29.     }        
  30.     var target=ds.GetTarget(res,prop,true);
  31.     if(target==null)
  32.         return null;
  33.     return target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
  34. }
  35.  
  36. /**
  37. * Get the array of the children of the given resource
  38. * @param {nsIRDFDatasource} ds
  39. * @param {nsIRDFResource|string} the parent resource or its id
  40. * @type [nsIRDFResource]
  41. */
  42. DWHUtil.getChildResources=function(ds,res) {
  43.     if(typeof(res)=="string") {
  44.         res=DWHUtil.RDF.GetResource(res);
  45.     }        
  46.     var children=[];
  47.     var seq=DWHUtil.RDFCUtils.MakeSeq(ds,res);
  48.     var j=seq.GetElements();
  49.     while(j.hasMoreElements()) {
  50.         var li=j.getNext().QueryInterface(Components.interfaces.nsIRDFResource);
  51.         children.push(li);
  52.     }
  53.     return children;
  54. }
  55.  
  56. /**
  57. * Utility to get a single DOM node from the given XPath expression
  58. * @param {node} node the XPath reference node
  59. * @param {string} xpath the XPath expression
  60. * @type Node
  61. */
  62. DWHUtil.xpGetSingleNode = function(node,xpath) {
  63.     var anode=node.ownerDocument.evaluate(xpath,node,null,
  64.         XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
  65.     return anode;
  66. }
  67.  
  68. /**
  69. * Utility to get an array of DOM nodes from the given XPath expression
  70. * @param {node} node the XPath reference node
  71. * @param {string} xpath the XPath expression
  72. * @type [Node]
  73. */
  74. DWHUtil.xpGetNodes = function(node,xpath) {
  75.     var nodes=[];
  76.     var xpr=node.ownerDocument.evaluate(xpath,
  77.         node,null,
  78.         XPathResult.ORDERED_NODE_ITERATOR_TYPE,
  79.         null);
  80.     var node0=xpr.iterateNext();
  81.     while(node0!=null) {
  82.         nodes.push(node0);
  83.         node0=xpr.iterateNext();
  84.     }
  85.     return nodes;
  86. }
  87.  
  88. /**
  89. * Utility to get an array of strings from the given XPath expression
  90. * @param {node} node the XPath reference node
  91. * @param {string} xpath the XPath expression
  92. * @type [string]
  93. */
  94. DWHUtil.xpGetStrings = function(node,xpath) {
  95.     var strings=[];
  96.     var xpr=node.ownerDocument.evaluate(xpath,
  97.         node,null,
  98.         XPathResult.ORDERED_NODE_ITERATOR_TYPE,
  99.         null);
  100.     var node0=xpr.iterateNext();
  101.     while(node0!=null) {
  102.         if(node0.nodeType==Node.TEXT_NODE)
  103.             strings.push(node0.nodeValue);
  104.         else if(node0.firstChild!=null && node0.firstChild.nodeType==Node.TEXT_NODE)
  105.             strings.push(node0.firstChild.nodeValue);
  106.         node0=xpr.iterateNext();
  107.     }
  108.     return strings;
  109. }
  110.  
  111. /**
  112. * Utility to get a single string value from the given XPath expression
  113. * @param {node} node the XPath reference node
  114. * @param {string} xpath the XPath expression
  115. * @type string
  116. */
  117. DWHUtil.xpGetString = function(node,xpath) {
  118.     var text=node.ownerDocument.evaluate(xpath,node,null,
  119.         XPathResult.STRING_TYPE,null).stringValue;
  120.     return text;
  121. }
  122.  
  123. /**
  124. * Determines a strign starts with the given substring
  125. */
  126. DWHUtil.startsWith = function(str,substr) {
  127.     if(str.substring(0,substr.length)==substr)
  128.         return true;
  129.     else
  130.         return false;
  131. }
  132.  
  133. DWHUtil.clearMenu=function(menupopup) {
  134.     while(menupopup.firstChild) {
  135.         menupopup.removeChild(menupopup.firstChild);
  136.     }
  137. }
  138.  
  139. DWHUtil.populateMenu=function(menupopup,data,global) {
  140.     if(global==null)
  141.         global={};
  142.     for(var i=0;i<data.length;i++) {
  143.         if(data[i].check) {
  144.             if(data[i].check()==false)
  145.                 continue;
  146.         }
  147.         if(data[i].menuseparator && data[i].menuseparator==true) {
  148.             var menusep=menupopup.ownerDocument.createElement("menuseparator");
  149.             menupopup.appendChild(menusep);
  150.         } else if(data[i].menu!=null) {
  151.             var menu=menupopup.ownerDocument.createElement("menu");
  152.             menu.setAttribute("label",data[i].label);
  153.             var menupopup0=menupopup.ownerDocument.createElement("menupopup");
  154.             menu.appendChild(menupopup0);
  155.             DWHUtil.populateMenu(menupopup0,data[i].menu,global);
  156.             menupopup.appendChild(menu);
  157.         } else {
  158.             var menuitem=menupopup.ownerDocument.createElement("menuitem");
  159.             for(var attr in data[i]) {
  160.                 var value=data[i][attr];
  161.                 menuitem.setAttribute(attr,value);
  162.             }
  163.             for(var attr in global) {
  164.                 var value=global[attr];
  165.                 menuitem.setAttribute(attr,value);
  166.             }
  167.             menupopup.appendChild(menuitem);
  168.         }
  169.     }
  170. }
  171.  
  172. /**
  173. * RDF service
  174. * @type nsIRDFService
  175. */
  176. DWHUtil.RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService().QueryInterface(Components.interfaces.nsIRDFService);
  177. /**
  178. * RDF container utility service
  179. * @type nsIRDFContainerUtils
  180. */
  181. DWHUtil.RDFCUtils = Components.classes["@mozilla.org/rdf/container-utils;1"].getService().QueryInterface(Components.interfaces.nsIRDFContainerUtils);
  182.  
  183. DWHUtil.DWHELPER_NS="http://dwhelper.xxx/1.0#";
  184.  
  185. DWHUtil.stringBundle=Components.classes["@mozilla.org/intl/stringbundle;1"].getService().
  186.     QueryInterface(Components.interfaces.nsIStringBundleService).createBundle("chrome://dwhelper/locale/strings.properties");
  187.  
  188. DWHUtil.promptService=Components.classes["@mozilla.org/embedcomp/prompt-service;1"].
  189.         getService(Components.interfaces.nsIPromptService);
  190.  
  191.  
  192. DWHUtil.getText=function(name) {
  193.     try {
  194.         return DWHUtil.stringBundle.GetStringFromName(name);
  195.     } catch(e) {
  196.         return name;
  197.     }
  198. }
  199.  
  200. DWHUtil.getFText=function(name,params) {
  201.     if(params==null)
  202.         params=[];
  203.     try {
  204.         return DWHUtil.stringBundle.formatStringFromName(name,params,params.length);
  205.     } catch(e) {
  206.         return name;
  207.     }
  208. }
  209.  
  210. DWHUtil.loadAsync = function(url,callback,args,body,method,options) {
  211.     if(arguments.length<2)
  212.         callback=null;
  213.     if(arguments.length<3)
  214.         args={};
  215.     if(arguments.length<6)
  216.         options={};
  217.     var xmlhttp = new XMLHttpRequest();
  218.     xmlhttp.userCallback=callback;
  219.     xmlhttp.userUrl=url;
  220.     xmlhttp.userArgs=args;
  221.     if(arguments.length<=4)
  222.         method="GET";
  223.     else
  224.         method=method.toUpperCase();
  225.     xmlhttp.requestedUrl = url;
  226.     xmlhttp.open (method, url);
  227.     if(options.contentType!=null)
  228.         xmlhttp.setRequestHeader("content-type",options.contentType);
  229.     if(options.referer!=null) 
  230.         xmlhttp.setRequestHeader("referer",options.referer);
  231.     xmlhttp.onerror=function(ev) {
  232.         var req = ev.target.channel.QueryInterface(Components.interfaces.nsIRequest);
  233.         var msg="Connection error: ";
  234.         switch(req.status) {
  235.             case 2152398861:
  236.                 msg+="Connection refused";
  237.                 break;
  238.                 default:
  239.                      msg+=" "+req.status;
  240.         }
  241.         if(this.userCallback!=null) {
  242.             try {
  243.                 msg="Error on url "+this.requestedUrl+"\n"+msg;
  244.                 this.userCallback(false,msg,this.userArgs);
  245.             } catch(e) {
  246.             }
  247.         }
  248.     }
  249.     xmlhttp.onload=function(ev) {
  250.         if(this.userCallback!=null) {
  251.             try {
  252.                 if(this.status==200) {
  253.                     this.userCallback(true,this,this.userArgs);
  254.                 }
  255.                 else {
  256.                     var msg = "Error on url "+this.requestedUrl+"\n"+this.status+": "+this.statusText;
  257.                     this.userCallback(false,msg,this.userArgs);
  258.                 }
  259.             } catch(e) {
  260.             }
  261.         }
  262.     }
  263.     xmlhttp.onreadystatechange=function() {
  264.     }
  265.       //xmlhttp.setRequestHeader('Content-Type','text/xml; charset=utf-8');
  266.       var data="";
  267.       if(arguments.length>3 && body!=null)
  268.         data=body;
  269.        xmlhttp.send(body);
  270. }
  271.  
  272. DWHUtil.getVersion=function() {
  273.     var extMgr=Components.classes["@mozilla.org/extensions/manager;1"].
  274.         getService(Components.interfaces.nsIExtensionManager);
  275.     var extId="{b9db16a4-6edc-47ec-a1f4-b86292ed211d}";
  276.     var version=DWHUtil.getPropertyValue(extMgr.datasource,
  277.         DWHUtil.RDF.GetResource("urn:mozilla:item:"+extId),
  278.         DWHUtil.RDF.GetResource("http://www.mozilla.org/2004/em-rdf#version")
  279.     );
  280.     return version;
  281. }
  282.  
  283. DWHUtil.getFlashGot=function() {
  284.     var flashGot=null;
  285.     try {
  286.         flashGot=Components.classes["@maone.net/flashgot-service;1"].
  287.             getService(Components.interfaces.nsISupports).wrappedJSObject;
  288.     } catch(e) {
  289.     }
  290.     return flashGot;
  291. }
  292.  
  293. DWHUtil.getDownloadMode=function(pref) {
  294.     var downloadMode="controlled";
  295.     try {
  296.         downloadMode=pref.getCharPref("download-mode");
  297.     } catch(e) {
  298.     }
  299.     if(downloadMode=="flashgot" && DWHUtil.getFlashGot()==null)
  300.         downloadMode="controlled";
  301.     return downloadMode;
  302. }
  303.  
  304. DWHUtil.getTopWindow=function() {
  305.     var wwatch = Components.classes["@mozilla.org/embedcomp/window-watcher;1"].getService().
  306.         QueryInterface(Components.interfaces.nsIWindowWatcher);
  307.     var i=wwatch.getWindowEnumerator();
  308.     while(i.hasMoreElements()) {
  309.         var w=i.getNext().QueryInterface(Components.interfaces.nsIDOMWindow);
  310.         try {
  311.             var w0=w.QueryInterface(Components.interfaces.nsIDOMWindowInternal);
  312.             if(w0.location.href=="chrome://browser/content/browser.xul")
  313.                 return w0;
  314.         } catch(e) {}
  315.     }
  316.     return null;
  317. }
  318.  
  319. DWHUtil.urlEncodeObject=function(obj) {
  320.  
  321.     var Util=Components.classes["@downloadhelper.net/util-service;1"]
  322.         .getService(Components.interfaces.dhIUtilService);
  323.     
  324.     var enc="";
  325.     for(var k in obj) {
  326.         if(enc.length>0)
  327.             enc+="&";
  328.         enc+=k+"=";
  329.         enc+=Util.encodeURL(obj[k]);
  330.     }
  331.     return enc;
  332. }
  333.  
  334. DWHUtil.serializeNode=function(node) {
  335.     var str="";
  336.     if(node.nodeType==Node.ELEMENT_NODE) {
  337.         str+="<"+node.nodeName+">\n";
  338.         var node0=node.firstChild;
  339.         while(node0!=null) {
  340.             str+=DWHUtil.serializeNode(node0);
  341.             node0=node0.nextSibling;
  342.         }
  343.         str+="</"+node.nodeName+">\n";
  344.     }
  345.     return str;
  346. }
  347.  
  348. DWHUtil.toClipboard=function(text) {
  349.     var str = Components.classes["@mozilla.org/supports-string;1"].
  350.         createInstance(Components.interfaces.nsISupportsString); 
  351.     if (!str) return; 
  352.     str.data = text; 
  353.     var trans = Components.classes["@mozilla.org/widget/transferable;1"].
  354.         createInstance(Components.interfaces.nsITransferable);
  355.     if (!trans) return; 
  356.     trans.addDataFlavor("text/unicode"); 
  357.     trans.setTransferData("text/unicode",str,text.length * 2); 
  358.     var clipid = Components.interfaces.nsIClipboard; 
  359.     var clip = Components.classes["@mozilla.org/widget/clipboard;1"].
  360.         getService(clipid); 
  361.     if (!clip) return; 
  362.     clip.setData(trans,null,clipid.kGlobalClipboard);
  363. }
  364.  
  365. DWHUtil.setCookie=function(cname,cvalue) {
  366.     try {
  367.         var cMgr = Components.classes["@mozilla.org/cookiemanager;1"].
  368.            getService(Components.interfaces.nsICookieManager2);
  369.         try {
  370.             cMgr.add(".downloadhelper.net","/",cname,""+cvalue,false,true,new Date().getTime()/1000+10000000);
  371.         } catch(e) {
  372.             cMgr.add(".downloadhelper.net","/",cname,""+cvalue,false,true,false,new Date().getTime()/1000+10000000);
  373.         }
  374.     } catch(e) {
  375.     }
  376. }
  377.  
  378. DWHUtil.removeCookie=function(cname) {
  379.     try {
  380.         var cMgr = Components.classes["@mozilla.org/cookiemanager;1"].
  381.            getService(Components.interfaces.nsICookieManager);
  382.         cMgr.remove(".downloadhelper.net",cname,"/",false);
  383.     } catch(e) {
  384.     }
  385. }
  386.  
  387. DWHUtil.setDWCountCookie=function(pref) {
  388.     try {
  389.         var dcc=pref.getBoolPref("disable-dwcount-cookie");
  390.         if(dcc==true)
  391.             return;
  392.     } catch(e) {
  393.     }    
  394.     try {
  395.         var dwcount=pref.getIntPref("download-count");
  396.         DWHUtil.setCookie("dwcount",dwcount);
  397.     } catch(e) {
  398.     }    
  399. }
  400.  
  401. function dumpDatasource(ds) {
  402.     if(ds==null)
  403.         return;
  404.     var i = ds.GetAllResources();
  405.     while(i.hasMoreElements()) {
  406.         var source = i.getNext();
  407.         var j = ds.ArcLabelsOut(source);
  408.         while(j.hasMoreElements()) {
  409.             var predicate = j.getNext();
  410.             var k = ds.GetTargets(source,predicate,true);
  411.             while(k.hasMoreElements()) {
  412.                 var target = k.getNext();
  413.                 source=source.QueryInterface(Components.interfaces.nsIRDFResource);
  414.                 predicate=predicate.QueryInterface(Components.interfaces.nsIRDFResource);
  415.                 try {
  416.                     target=target.QueryInterface(Components.interfaces.nsIRDFResource);
  417.                 } catch(e) {
  418.                     target=target.QueryInterface(Components.interfaces.nsIRDFLiteral);
  419.                 }
  420.                 dump(source.Value+" - "+predicate.Value+" - "+target.Value+"\n");
  421.             }
  422.         }
  423.     }
  424. }
  425.  
  426.  
  427.  
  428.